from django.contrib.auth.hashers import check_password
from django.shortcuts import render, HttpResponse
from rest_framework.views import APIView
from rest_framework.response import Response

from .ser import *

from django.core.mail import send_mail  # 引入发邮件的模块

import datetime
import jwt


# 1. 注册视图类
class RegisterView(APIView):

    def post(self, request):

        # 1. 输出数据
        # print(request.data, '-------------001')

        # 2. 反序列化
        user_ser = UserSer(data=request.data)

        # 3. 验证
        if user_ser.is_valid():
            # 4. 保存---返回用户对象
            user = user_ser.save()

            # 前端提交的邮箱
            email = request.data.get('email')

            # # 5. 发邮件--
            # send_mail(
            #     subject="好又多商城激活邮件",  # 邮件标题
            #     from_email="h2004b@163.com",  # 发件人邮箱
            #     message="",  # 邮件内容 格式一
            #     html_message='<a href="http://127.0.0.1:8000/userapp/active/?uid=%s">请点击激活账号</a>' % user.id,  # 格式二
            #     recipient_list=[email, ],  # 收件人列表
            # )

            # 6. 响应
            return Response({'msg': '注册成功', 'code': 200})
        else:
            print(user_ser.errors, '--------------002')   # 输出验证不通过的原因
            return Response({'msg': '注册失败', 'code': 400})


# 2. 用户激活函数
def active(request):
    # 1. 获取用户id
    uid = request.GET.get('uid')
    print(uid, '-----------00099')
    # 2. 更新用户状态
    try:
        # 把用户状态由0（未激活），改为1(激活)
        User.objects.filter(id=uid).update(status=1)
        # 3. 响应
        return HttpResponse('激活成功')
    except:
        return HttpResponse('激活失败')


# 3. 登陆接口
class LoginView(APIView):

    def post(self, request):

        # 1. 获取前端用户名和密码
        name = request.data.get('name')
        pwd = request.data.get('pwd')

        # 2. 查询用户，判断密码是是否正确
        user = User.objects.filter(name=name).first()

        # 2.1 判断用户是否存在
        if user and check_password(pwd, user.pwd):
            # 用户名和密码正确，使用jwt实现状态保持
            # 3.1 头部
            # header = {
            #     'alg': "HS256",
            #     'typ': "JWT"
            # }

            # 3.2 载荷
            payload = {
                'exp': datetime.datetime.utcnow() + datetime.timedelta(hours=10),
                'uid': user.id
            }

            # 3.3 生成token--加密
            token = jwt.encode(payload=payload, key='abc')
            print(token, '------------token值')

            # 3. 响应
            return Response({'msg': '登陆成功', 'code': 200, 'name': name, 'token': token})
        else:
            return Response({'msg': '用户名或者密码错误', 'code': 400})




